package cl.clientesoarest;

import android.R.id;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Toast;
import cl.clientews.rest.PublicacionesSOAWS;

/**
 * 
 * Clase que maneja las opciones CRUD de publicaciones
 * @author MariaJose
 *
 */
public class Tab_PublicacionesSoa extends Activity {

	private Button btn_add;
	private Button btn_update;
	private Button btn_delete;
	private Button btn_findall;
	private Button btn_find;
	private ProgressDialog pdia;
	//objeto de la llamada al servicio del wwebservice de pubicaciones
	private PublicacionesSOAWS pubws = new PublicacionesSOAWS();

	@Override
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);

		/*carga la vista del layout opcionessoa*/
		setContentView(R.layout.opcionessoa);

		btn_add = (Button) findViewById(R.id.btnadd);
		btn_update = (Button) findViewById(R.id.btn_update);
		btn_delete = (Button) findViewById(R.id.btn_delete);
		btn_findall = (Button) findViewById(R.id.btn_allfind);
		btn_find = (Button) findViewById(R.id.btn_find);

		//declara opciones onclick de los botones
		btn_add.setOnClickListener(clickbtn);
		btn_update.setOnClickListener(clickbtn);
		btn_delete.setOnClickListener(clickbtn);
		btn_findall.setOnClickListener(clickbtn);
		btn_find.setOnClickListener(clickbtn);

	}

	/**
	 * Evento onclick, que llama a los  metodos CRUD correspondientes
	 */
	private OnClickListener clickbtn = new OnClickListener() {

		@Override
		public void onClick(View v) {
			switch (v.getId()) {

			case R.id.btnadd:
				alertDialodIngresarPublicacion();
				break;
			case R.id.btn_update:
				alertDialodActualizarPublicacion();
				break;
			case R.id.btn_delete:
				alertDialodDeletePublicacion();
				break;
			case R.id.btn_allfind:
				alertDialodFindAllPublicacion();
				break;
			case R.id.btn_find:
				alertDialodFindPublicacion();
				break;

			}

		}
	};


	/**
	 * Metodo que realiza el ingreso de las publicaciones
	 * @return void
	 * @author MariaJose
	 */
	public void alertDialodIngresarPublicacion(){

		/*estructura de codigo para generar un AlertDialog sobre la Activity*/
		LayoutInflater factory = LayoutInflater.from(this);
		// crea un vista definido con un layout.
		final View textEntryView = factory.inflate(R.layout.addpublicacion, null);
		//crear objeto alertDialog
		AlertDialog.Builder alert = new AlertDialog.Builder(this);   
		//le sete caracateristicas al objeto AlertDialog
		alert.setTitle("Ingrese Publicación");                 
		alert.setView(textEntryView);

		//Ok
		alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {  
			public void onClick(DialogInterface dialog, int whichButton) {  

				/*declara y utiliza los componentes que estan 
				en el layout que se declara para el AlertDialog creado */
				EditText textomonto;
				EditText textodescrip;
				EditText textorut;

				textomonto = (EditText) textEntryView.findViewById(R.id.edit_montoadd);
				textodescrip = (EditText) textEntryView.findViewById(R.id.edit_descripcionadd);
				textorut = (EditText) textEntryView.findViewById(R.id.edit_rutadd);

				String monto = textomonto.getText().toString();
				String des = textodescrip.getText().toString();
				String rut = textorut.getText().toString();

				//si faltan datos
				if(monto.equals("") || des.equals("") || rut.equals("")){

					alertDialodIngresarPublicacion();
				}
				else{// si son correctos los datos

					
					addPublicacion(monto, des, rut);
					
					return;  
				}   
			}  
		});  

		//Cancel
		alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

			public void onClick(DialogInterface dialog, int which) {
				return;   
			}
		});
		alert.show();   
	}

	protected void addPublicacion(String monto, String des, String rut) {
		new addPublicacionTask().execute(monto, des, rut);
	}
	
	
	
	private class addPublicacionTask extends AsyncTask<String, Void, String>{
		@Override
		protected void onPreExecute(){
			 super.onPreExecute();
		        pdia = new ProgressDialog(Tab_PublicacionesSoa.this);
		        pdia.setMessage("Cargando...");
		        pdia.show(); 
		}
		@Override
		protected String doInBackground(String... params) {
			//llama al servicioweb
			String resultado = pubws.addPublicacion(params[0], params[1], params[2]);
			

			return resultado;
		}
		@Override
	    protected void onPostExecute(String result) {
			pdia.dismiss();
			//muestra la respuesta enviada por el servicioWeb
			Toast.makeText(getBaseContext(), result, Toast.LENGTH_SHORT).show();
	    }
		@Override
        protected void onCancelled() {
            Toast.makeText(Tab_PublicacionesSoa.this, "Tarea cancelada!",
                Toast.LENGTH_SHORT).show();
        }
		
	}
	

	/**
	 * metodo que actualiza un dato de una publicacion segun el parametro especificado
	 * @return void
	 * @author MariaJose
	 */
	public void alertDialodActualizarPublicacion(){

		/*estructura de codigo para generar un AlertDialog sobre la Activity*/
		LayoutInflater factory = LayoutInflater.from(this);
		//carga vista con  un layout predeterminado
		final View textEntryView = factory.inflate(R.layout.updatepublicacion, null);
		//crea objeto de AlertDialog
		AlertDialog.Builder alert = new AlertDialog.Builder(this);                 
		alert.setTitle("Actualizar Publicaci�n");                 
		alert.setView(textEntryView);

		//ok
		alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {  
			public void onClick(DialogInterface dialog, int whichButton) {  

				//declara y utiliza los componentes  del layout para realizar la actualizacion
				EditText textomontodesc;
				EditText textonuevo;
				RadioButton radio_monto;
				RadioButton radio_descri;

				textomontodesc = (EditText) textEntryView.findViewById(R.id.edit_monto_desc);
				textonuevo = (EditText) textEntryView.findViewById(R.id.edit_nuevovalor_pub);
				radio_monto = (RadioButton) textEntryView.findViewById(R.id.radiomonto);
				radio_descri = (RadioButton) textEntryView.findViewById(R.id.radiodescrip);

				String montodesc = textomontodesc.getText().toString();
				String nuevocampo = textonuevo.getText().toString();
				int radiocampo = 0;

				/*segun el radioButton seleccionado el "radiocampo" 
				 * tiene un determinado valor
				 */
				if(radio_descri.isChecked())
				{
					radiocampo = 1;
				}
				if(radio_monto.isChecked())
				{
					radiocampo = 2;
				}

				//no vienen todos los datos desde el alertDialog
				if(montodesc.equals("") || nuevocampo.equals("")|| radiocampo == 0){

					alertDialodActualizarPublicacion();
				}
				else{//vienen datos completos

					//llamada al servicioWeb
					String resultado = pubws.updatePublicacion(montodesc, radiocampo, nuevocampo);
					//muestra la respuesta delservicio web al realizar la actualizacion
					Toast.makeText(getBaseContext(), resultado, 
							Toast.LENGTH_SHORT).show();
					
					updatePublicacion(montodesc, radiocampo, nuevocampo);
					return;  
				}


			}  
		});  

		//cancel
		alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

			public void onClick(DialogInterface dialog, int which) {
				return;   
			}
		});

		//para mostrar el alertDialog
		alert.show();   
	}

	protected void updatePublicacion(String montodesc, int radiocampo, String nuevocampo) {
		new updatePublicacionTask().execute(montodesc, radiocampo+"", nuevocampo);
	}
	private class updatePublicacionTask extends AsyncTask<String, Void, String>{
		@Override
		protected void onPreExecute(){
			 super.onPreExecute();
		        pdia = new ProgressDialog(Tab_PublicacionesSoa.this);
		        pdia.setMessage("Cargando...");
		        pdia.show(); 
		}
		@Override
		protected String doInBackground(String... params) {
			//llama al servicioweb
			String resultado = pubws.updatePublicacion(params[0], Integer.parseInt(params[1]), params[2]);
			return resultado;
		}
		@Override
	    protected void onPostExecute(String result) {
			pdia.dismiss();
			//muestra la respuesta enviada por el servicioWeb
			Toast.makeText(getBaseContext(), result, Toast.LENGTH_SHORT).show();
	    }
		@Override
        protected void onCancelled() {
            Toast.makeText(Tab_PublicacionesSoa.this, "Tarea cancelada!",
                Toast.LENGTH_SHORT).show();
        }
		
	}

	/**
	 * Metodo para eliminar una publicacion segun el ID de esta
	 * @return void
	 * @author MariaJose
	 */
	public void alertDialodDeletePublicacion(){

		/*estructura de codigo para generar un AlertDialog sobre la Activity*/
		LayoutInflater factory = LayoutInflater.from(this);
		//carga en la vista una layout predeterminado
		final View textEntryView = factory.inflate(R.layout.deletepublicacion, null);
		//crear objeto AlertDialog
		AlertDialog.Builder alert = new AlertDialog.Builder(this);                 
		alert.setTitle("Eliminar Publicacion");                 
		alert.setView(textEntryView);

		//Ok
		alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {  
			public void onClick(DialogInterface dialog, int whichButton) {  

				EditText textoidpub;
				textoidpub = (EditText) textEntryView.findViewById(R.id.edit_idpub_delete);
				String idpub = textoidpub.getText().toString();


				//no vienen id para poder eliminar
				if(idpub.equals("")){

					alertDialodDeletePublicacion();
				}
				else{
					deletePublicacion(idpub);
					return;  
				}


			}  
		});  

		//cancel
		alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

			public void onClick(DialogInterface dialog, int which) {
				return;   
			}
		});
		alert.show();   
	}

	protected void deletePublicacion(String idpub) {
		new deletePublicacionTask().execute(idpub);
	}
	private class deletePublicacionTask extends AsyncTask<String, Void, String>{
		@Override
		protected void onPreExecute(){
			 super.onPreExecute();
		        pdia = new ProgressDialog(Tab_PublicacionesSoa.this);
		        pdia.setMessage("Cargando...");
		        pdia.show(); 
		}
		@Override
		protected String doInBackground(String... params) {
			//llama al servicioweb
			String resultado = pubws.deletePublicacion(params[0]);
			return resultado;
		}
		@Override
	    protected void onPostExecute(String result) {
			pdia.dismiss();
			//muestra la respuesta enviada por el servicioWeb
			Toast.makeText(getBaseContext(), result, Toast.LENGTH_SHORT).show();
	    }
		@Override
        protected void onCancelled() {
            Toast.makeText(Tab_PublicacionesSoa.this, "Tarea cancelada!",
                Toast.LENGTH_SHORT).show();
        }
		
	}


	/**
	 * Metodo para buscar una determinada publicacion
	 * y muestra si encuentra algun registro asociado a la busqueda
	 * @return void
	 * @author MariaJose
	 */
	public void alertDialodFindPublicacion(){

		/*estructura de codigo para generar un AlertDialog sobre la Activity*/
		LayoutInflater factory = LayoutInflater.from(this);
		//carga en la vista un layout predeterminado
		final View textEntryView = factory.inflate(R.layout.findpublicacion, null);
		//crea objeto AlertDialog
		AlertDialog.Builder alert = new AlertDialog.Builder(this);                 
		alert.setTitle("Buscar Publicación");                 
		alert.setView(textEntryView);

		//ok
		alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {  
			public void onClick(DialogInterface dialog, int whichButton) {  

				EditText texidpub;
				texidpub = (EditText) textEntryView.findViewById(R.id.edit_id_find);
				String idpub = texidpub.getText().toString();



				if(idpub.equals("")){

					alertDialodFindPublicacion();
				}
				else{

					//realiza la llamada al servicioWeb de busqueda por  el id de una pub
					String resultado = pubws.findPublicacion(idpub);
					Toast.makeText(getBaseContext(), resultado, Toast.LENGTH_SHORT).show();
					
					findPublicacion(idpub);
					return;  
				}


			}  
		});  

		//cancel
		alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

			public void onClick(DialogInterface dialog, int which) {
				return;   
			}
		});
		alert.show();   
	}

	protected void findPublicacion(String idpub) {
		new findPublicacionTask().execute(idpub);
	}
	
	private class findPublicacionTask extends AsyncTask<String, Void, String>{
		@Override
		protected void onPreExecute(){
			 super.onPreExecute();
		        pdia = new ProgressDialog(Tab_PublicacionesSoa.this);
		        pdia.setMessage("Cargando...");
		        pdia.show(); 
		}
		@Override
		protected String doInBackground(String... params) {
			//llama al servicioweb
			String resultado = pubws.findPublicacion(params[0]);
			return resultado;
		}
		@Override
	    protected void onPostExecute(String result) {
			pdia.dismiss();
			//muestra la respuesta enviada por el servicioWeb
			Toast.makeText(getBaseContext(), result, Toast.LENGTH_SHORT).show();
	    }
		@Override
        protected void onCancelled() {
            Toast.makeText(Tab_PublicacionesSoa.this, "Tarea cancelada!",
                Toast.LENGTH_SHORT).show();
        }
		
	}

	/**
	 * Metodo que realiza la busqueda de todoslas publicaciones segun parametro de 
	 * busqueda.
	 * @return void
	 * @author MariaJose
	 */
	public void alertDialodFindAllPublicacion(){

		/*estructura de codigo para generar un AlertDialog sobre la Activity*/
		LayoutInflater factory = LayoutInflater.from(this);
		final View textEntryView = factory.inflate(R.layout.findpublicacionall, null);
		AlertDialog.Builder alert = new AlertDialog.Builder(this);                 
		alert.setTitle("Buscar registros con :");                 
		alert.setView(textEntryView);


		//ok
		alert.setPositiveButton("Buscar", new DialogInterface.OnClickListener() {  
			public void onClick(DialogInterface dialog, int whichButton) {  

				EditText textoFind;
				textoFind = (EditText) textEntryView.findViewById(R.id.edit_id_findall);

				String buscar = textoFind.getText().toString();

				/* realiza la llamada al servicioWeb de buscar todos y
				 * comienza una nueva actividad donde mostrará los datos
				 * encontrados.
				 */
				
				findAllPublicacion(buscar);
				return;
			}


		});  

		alert.setNegativeButton("Salir",  new DialogInterface.OnClickListener() {

			public void onClick(DialogInterface dialog, int which) {
				return;   
			}
		});

		alert.show(); 

	}
	
	protected void findAllPublicacion(String idpub) {
		new findAllPublicacionTask().execute(idpub);
	}
	
	private class findAllPublicacionTask extends AsyncTask<String, Void, String>{
		@Override
		protected void onPreExecute(){
			 super.onPreExecute();
		        pdia = new ProgressDialog(Tab_PublicacionesSoa.this);
		        pdia.setMessage("Cargando...");
		        pdia.show(); 
		}
		@Override
		protected String doInBackground(String... params) {
			//llama al servicioweb
			String resultado = pubws.findAllPublicacion(params[0]);
			return resultado;
		}
		@Override
	    protected void onPostExecute(String result) {
			pdia.dismiss();
			Intent i = new Intent();
			i.setClass(Tab_PublicacionesSoa.this, ResultadoFindPublicacion.class);
			//entrega el json que nos trae el servicio.
			i.putExtra("datos", result);
			startActivity(i);
			Toast.makeText(getBaseContext(), result, Toast.LENGTH_SHORT).show();
	    }
		@Override
        protected void onCancelled() {
            Toast.makeText(Tab_PublicacionesSoa.this, "Tarea cancelada!",
                Toast.LENGTH_SHORT).show();
        }
		
	}

}
